osc_scoresheetsfandomcom_pl-20200213-history
Moduł:Wyniki sportowe
Module to build results cross-tables for standings in Sports -- See documentation for details require('Module:No globals') local p = {} -- Main function function p.main(frame) -- Declare locals local Args = require('Module:Arguments').getArgs(frame, { trim = true, removeBlanks = false, wrappers = "Szablon:Wyniki sportowe", }) local N_teams = 0 local t = {} local t_footer = {} local t_return = {} local team_list = {} local ii, ii_fw, bg_col, team_name, team_code_ii -- Edit links if requested local template_name = Args'template_name' or '' local edit_links = template_name '' and '' or frame:expandTemplate{ title = 'navbar', args = { mini=1, style='float:right', template_name} } -- Load some other modules local p_sub = require('Moduł:Tabela sportowa/sub') -- Read in number of consecutive teams (ignore entries after skipping a spot) while Args'team'..N_teams+1 ~= nil do N_teams = N_teams+1 -- Sneakily add it twice to the team_list parameter, once for the actual -- ranking, the second for position lookup in sub-tables -- This is possible because Lua allows both numbers and strings as indices. team_listN_teams = Args'team'..N_teams -- i^th entry is team X team_list[Args'team'..N_teams] = N_teams -- team X entry is position i end -- Get team to show local ii_show = team_list[Args'showteam'] -- nil if non-existant -- Create header -- Open table table.insert(t,' \n') -- Get info for footer local update = Args'update' or 'unknown' local start_date = Args'start_date' or 'unknown' local source = Args'source' or frame:expandTemplate{ title = 'citation needed', args = { reason='No source parameter defined', date=os.date('%B %Y') } } -- Create footer text -- Date updating if string.lower(update) 'complete' then -- Do nothing elseif update '' then -- Empty parameter table.insert(t_footer,'Updated to match(es) played on unknown. ') elseif string.lower(update) 'future' then -- Future start date table.insert(t_footer,'First match(es) will be played on '..start_date..'. ') else table.insert(t_footer,'Aktualne na '..update..'. ') end table.insert(t_footer,'Źródło: '..source) if (Args'matches_style' or '') 'FBR' then table.insert(t_footer, ' Kolory: Zielony = zwycięstwo gospodarzy; Żółty = remis; Czerwony = zwycięstwo gości.') end -- As reflist size text t_footer = ' '..table.concat(t_footer)..' ' -- Add footer to main text table table.insert(t,t_footer) return table.concat(t) end -- Other functions local function get_short_name(s, t, n) -- return short name if defined if s and s ~= '' then return s end -- replace link text in name with team abbr if possible if n and t and n:match('(%[%^%[%*%]%])') then n = mw.ustring.gsub(n, '(%[%%*%|)%]*(%]%])', '%1' .. t .. '%2') n = mw.ustring.gsub(n, '(%[%%*)(%]%])', '%1|' .. t .. '%2') return n end -- nothing worked, so just return the unlinked team abbr return t or '' end local function get_score_background(s) local s1, s2 -- Define the colouring local wc, lc, tc = '#CEFFCD', '#FFBBBB', '#FFFFBB' -- delink if necessary if s:match('^%s*%[%^%[%*%|([^%%]*)%]%]') then s = s:match('^%s*%[%^%[%*%|([^%%]*)%]%]') end -- get the scores s1 = tonumber(mw.ustring.gsub( s or '', '^%s*(%d%d*)%s*:%s*(%d%d*).*', '%1' ) or '') or '' s2 = tonumber(mw.ustring.gsub( s or '', '^%s*(%d%d*)%s*:%s*(%d%d*).*', '%2' ) or '') or '' -- return colouring if possible if s1 ~= '' and s2 ~= '' then return (s1 > s2) and wc or ((s2 > s1) and lc or tc) else return 'transparent' end end local function format_score(s) s = mw.ustring.gsub(s or '', '^%s*(%d+)%s*:−—–%-%s*(%d+)', '%1:%2') s = mw.ustring.gsub(s, '^%s*(%d+)%s*&MmNnDdAaSsHh;%s*(%d+)', '%1:%2') s = mw.ustring.gsub(s, '^%s*(%[%^%[%*%|%d+)%s*%-%s*(%d+)', '%1:%2') s = mw.ustring.gsub(s, '^%s*(%[%^%[%*%|%d+)%s*&MmNnDdAaSsHh;%s*(%d+)', '%1:%2') return s end function p.header(tt,Args,p_sub,N_teams,team_list) local ii, team_code_ii, short_name -- Set match column width local col_width = Args'match_col_width' or '28' -- Get some default values in case it doesn't start at 1 local top_pos = tonumber(Args'highest_pos') or 1 for ii=top_pos,N_teams do team_code_ii = team_listii short_name = get_short_name(Args'short_'..team_code_ii, team_code_ii, Args'name_'..team_code_ii) tt = p_sub.colhead(tt,col_width,short_name) end return tt end function p.row(tt,Args,N_teams,team_list,ii,ii_show) -- Note ii is the row number being shown local jj, fw, bg, result, team_code_ii, team_code_jj local cell_bold = false -- Set score cell style local matches_style = Args'matches_style' or '' team_code_ii = team_listii -- Get some default values in case it doesn't start at 1 local top_pos = tonumber(Args'highest_pos') or 1 for jj=top_pos,N_teams do if ii jj then -- Solid cell if ii ii_show then cell_bold = true else cell_bold = false end fw = cell_bold and 'font-weight: bold;' or 'font-weight: normal;' bg = 'background-color:transparent;' table.insert(tt,'| style="'..fw..bg..'" | —\n') else -- Content cell -- Set bolding and background if ii ii_show or jj ii_show then cell_bold = true else cell_bold = false end fw = cell_bold and 'font-weight: bold;' or 'font-weight: normal;' bg = 'background-color:transparent;' -- Now for the actual result team_code_jj = team_listjj result = Args'match_'..team_code_ii..'_'..team_code_jj or '' -- Reformat dashes if result ~= '' then result = format_score(result) end -- Background coloring if enabled if matches_style 'FBR' and result ~= '' then bg = 'background-color:' .. get_score_background(result) .. ';' end table.insert(tt,'| style="white-space:nowrap;'..fw..bg..'" |'..result..'\n') end end return tt end return p